package com.agenda;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;

public class DBAdapter {

	//Campos de la BD
	public static final String KEY_USER_ROWID = "_id";
	public static final String KEY_USER_LOGIN = "login";
	public static final String KEY_USER_PASS = "pass";
	public static final String KEY_USER_VALIDO = "valido";
	public static final String KEY_USER_ULT_ACCESO = "ultimo_acceso";	
	
	private static final String DATABASE_USER_TABLE = "usuario";
	
	
	public static final String KEY_PERSON_ROWID = "_id";
	public static final String KEY_PERSON_ZONE = "zona";
	public static final String KEY_PERSON_NAME = "nombre";
	public static final String KEY_PERSON_NEGOCIO = "negocio";
	public static final String KEY_PERSON_TELF1 = "telf1";
	public static final String KEY_PERSON_TELF2 = "telf2";
	public static final String KEY_PERSON_TELF3 = "telf3";
	public static final String KEY_PERSON_DIREC = "direccion";
	public static final String KEY_PERSON_EMAIL = "email";
	public static final String KEY_PERSON_TARJ = "tarjeta";
	public static final String KEY_PERSON_MAPA = "mapa";
	public static final String KEY_PERSON_OBS = "observacion";

	private static final String DATABASE_PERSON_TABLE = "persona";

	private Context context;
	private SQLiteDatabase database;
	private BaseDatos dbHelper;

	public DBAdapter(Context context) {
		this.context = context;
	}

	public DBAdapter open() throws SQLException {
		dbHelper = new BaseDatos(context);
		database = dbHelper.getWritableDatabase();
		return this;
	}

	public void close() {
		dbHelper.close();
	}
	
	/**
	 * Crea una nuevo Usuario, si esto va bien retorna la
	 * rowId de la tarea, de lo contrario retorna -1
	 */
	public long createUsuario(String l, String p, String v, String ua ){
		ContentValues initialValues = createContentValuesU( l, p, v, ua );

		return database.insert(DATABASE_USER_TABLE, null, initialValues);
	}
		
	
	//Actualiza el Usuario
	public boolean updateUsuario(String l, String p, 
									String v, String ua ) {
		ContentValues updateValues = createContentValuesU(l, p, v, ua );
		
		return database.update(DATABASE_USER_TABLE, updateValues, 
								KEY_USER_LOGIN + "=?" , new String[] { l }) > 0;

	}
	
	//Borra el Usuario
	public boolean deleteUsuario(String login) {
		return database.delete(DATABASE_USER_TABLE, KEY_USER_LOGIN + "=?", 
				new String[] { login }	) > 0;
	}
	
	//Returna un Cursor que contiene todos los items
	public Cursor fetchAllUsuarios() {
		database = dbHelper.getReadableDatabase();
		Cursor mCursor = database.query(DATABASE_USER_TABLE, new String[] { 
				KEY_USER_LOGIN, KEY_USER_PASS, KEY_USER_VALIDO,
				KEY_USER_ULT_ACCESO }, null, null, null,null, null);
		
		if (mCursor != null) {
			mCursor.moveToFirst();
		}
		return mCursor;
	}
	
	//Retorna un Cursor que contiene la info del item
	public Cursor fetchUsuario( String login ) throws SQLException {
		
		Cursor mCursor = database.query(true, DATABASE_USER_TABLE, 
										null, KEY_USER_LOGIN + "=?", 
										new String[] { login }, null, 
										null, null, null);
		
		if (mCursor != null) {
			mCursor.moveToFirst();
		}
		return mCursor;
	}

	private ContentValues createContentValuesU( String l, String p, 
												String v, String ua ) {
		
		ContentValues values = new ContentValues();
		values.put( KEY_USER_LOGIN, l );
		values.put( KEY_USER_PASS, p );
		values.put( KEY_USER_VALIDO, v );
		values.put( KEY_USER_ULT_ACCESO, ua );
		return values;
	}
	
	/**
	 * Crea una nueva Persona, si esto va bien retorna la
	 * rowId de la tarea, de lo contrario retorna -1
	 */
	public long createPersona(String z, String n, String neg, 
			String telf1, String telf2, String telf3, String dir, String email, 
			String tp, String map, String obs ){
		
		ContentValues initialValues = createContentValuesP( z, n, neg, 
				telf1, telf2, telf3, dir, email, tp, map, obs );

		return database.insert(DATABASE_PERSON_TABLE, null, initialValues);
	}
	
	//Actualiza la Persona
	public boolean updatePersona( String z, String n, String neg, 
									String telf1, String telf2, String telf3, 
									String dir, String email, String tp, 
									String map, String obs ){
		
		ContentValues updateValues = createContentValuesP( z, n, neg, 
									telf1, telf2, telf3, dir, email, tp, map,
									obs );

		return database.update(DATABASE_PERSON_TABLE, updateValues, 
									KEY_PERSON_ZONE + " = " + z + "AND " +
									KEY_PERSON_NAME + " = " + n, null) > 0;
	}
	
	//Borra la tarea
	public boolean deletePersona(long id) {
		return database.delete(DATABASE_PERSON_TABLE, 
								KEY_USER_ROWID + "=" + id, null) > 0;
	}
	
	//Borra la tarea
	public void deleteAllPersona() {
		database.delete(DATABASE_PERSON_TABLE, null, null);
	}
	
	
	//Returna un Cursor que contiene todos los items
	public Cursor fetchAllPersona() {
		database = dbHelper.getReadableDatabase();
		
		Cursor mCursor = database.query(DATABASE_PERSON_TABLE, new String[] 
				{ KEY_PERSON_ROWID, KEY_PERSON_ZONE, KEY_PERSON_NAME, 
				KEY_PERSON_NEGOCIO, KEY_PERSON_TELF1, KEY_PERSON_TELF2, 
				KEY_PERSON_TELF3, KEY_PERSON_DIREC,  KEY_PERSON_EMAIL, 
				KEY_PERSON_TARJ, KEY_PERSON_MAPA, KEY_PERSON_OBS }, 
				null, null, null,null, null);
		
		if (mCursor != null){
			mCursor.moveToFirst();
		}
		return mCursor;
	}
	
	//Returna un Cursor que contiene la info del item
	public Cursor fetchPersona( String id ) throws SQLException {
		Cursor mCursor = database.query(true, DATABASE_PERSON_TABLE, null, 
				KEY_PERSON_ROWID + "=?", new String[] { id }, null, null,
				null, null);
		
		if (mCursor != null){
			mCursor.moveToFirst();
		}
		return mCursor;
	}
	
	private ContentValues createContentValuesP( String z, String n, 
												String neg, String telf1, 
												String telf2, String telf3, 
												String dir, String email, 
												String tp, String map, 
												String obs ){	
		ContentValues values = new ContentValues();
		values.put( KEY_PERSON_ZONE, z);
		values.put( KEY_PERSON_NAME, n);
		values.put( KEY_PERSON_NEGOCIO, neg);
		values.put( KEY_PERSON_TELF1, telf1);
		values.put( KEY_PERSON_TELF2, telf2);
		values.put( KEY_PERSON_TELF3, telf3);
		values.put( KEY_PERSON_DIREC, dir);
		values.put( KEY_PERSON_EMAIL, email);
		values.put( KEY_PERSON_TARJ, tp);
		values.put( KEY_PERSON_MAPA, map);
		values.put( KEY_PERSON_OBS, obs);

		return values;
	}	
}